Os experimentos de redes neurais foram divididos em duas etapas: a da escolha de parâmetros e a de avaliação do melhor cenário. Na primeira etapa, de escolha de parâmetros, são avaliados diversos cenários com parâmetros diferentes com objetivo de identificar quais os possíveis parâmetros retornam o melhor resultado realizando uma validação cruzada \textit{3-fold}. Este valor baixo do \textit{k-fold} deve-se ao tempo de execução da validação cruzada: o aumento do número de partições impacta no tempo de execução linearmente. Assim, era mais rápido executar a primeira etapa com 3 partições do que com 10. Já na segunda etapa, de validação, o melhor cenário escolhido previamente é avaliado através de validação cruzada \textit{10-fold} juntamente com repetidas execuções.

Fixou-se o parâmetro de momentum em 0.8. Para os demais três parâmetros possíveis de serem alterados (número de iterações, taxa de aprendizado e número de neurônios intermediários), foi feito uma execução completa da combinação de um conjunto de valores para cada parâmetro. No total, foram avaliados 72 cenários. A Tabela \ref{tab:parametros} apresenta os valores que foram usados para os parâmetros da rede neural.


Na primeira etapa, foi feita uma varredura de parâmetros para observar o impacto da variação de cada parâmetro no resultado da execução da rede. Foram avaliados 72 cenários variando valores para 3 parâmetros. A Tabela \ref{tab:parametros} apresenta os valores que foram usados para os parâmetros da rede neural. O \textit{momentum} foi fixado em 0,8, sendo avaliados apenas o impacto da variação dos outros parâmetros da rede. Como o valor do \textit{momentum} usado foi alto, valores mais baixos de taxa de aprendizado são mais adequados (como explicado anteriormente), sendo então escolhidos 6 valores entre 0,001 e 0,3. Para facilitar a visualização dos dados e determinar valores significativos para a taxa de aprendizado em um intervalo grande, foi utilizada a função exponencial com base 10, resultando nos seguinte valores: $10^{-3} = 0,001; 10^{-2.5} = 0,003; 10^{-2} = 0,01; 10^{-1.5} = 0,03; 10^{-1} = 0,1; 10^{-0.5} = 0,3$.

Para o número máximo de iterações foram usados 3 valores (100, 1000 e 10000). Estes valores não são tão altos pois a variação da base de dados não parece ser alta, não sendo então suficiente um número de iterações muito alto. São usados 4 valores para o número de neurônios intermediários (4, 8, 12 e 16). Inicialmente, a análise foi feita com números baixos de neurônios intermediários para que os valores para os outros parâmetros fossem escolhidos sem que o tempo de execução dos experimentos fosse muito alto. Em seguida, foi feita uma outra análise variando o número de neurônios intermediários com valores maiores, fixando os valores dos outros parâmetros de acordo com os melhores resultados obtidos nos primeiros experimentos.

Como o valor do momentum usado foi alto, valores mais baixos de taxa de aprendizado são mais adequados, sendo então escolhidos 6 valores entre 0,001 e 0,3. Para facilitar a visualização dos dados e determinar valores significativos para a taxa de aprendizado em um intervalo grande, foi utilizada a função exponencial com base 10, resultando nos seguinte valores: $10^{-3} = 0,001$; $10^{-2.5} = 0,003$; $10^{-2} = 0,01$; $10^{-1.5} = 0,03$; $10^{-1} = 0,1$, e; $10^{-0.5} = 0,3$.

Para o número máximo de iterações foram utilizados 3 valores: $100$, $1000$ e $10000$. Estes valores não são tão altos pois a variação da base de dados não parece ser alta, não sendo então necessário um número grande de iterações. E para o número de neurônios intermediários foram utilizados 4 valores: $4$, $8$, $12$ e $16$. Apesar da literatura indicar uma escolha inicial adequada em torno de $16$ a $26$ neurônios, Inicialmente, a análise foi feita com valores baixos para reduzir  o tempo de execução dos experimentos. Em seguida, foi feita uma outra análise variando o número de neurônios intermediários com valores maiores, fixando os valores dos outros parâmetros de acordo com os melhores resultados obtidos nos primeiros experimentos.


\begin{table}[h!]
\caption{Valores dos parâmetros da rede neural usados nos experimentos}
\begin{center}
\begin{tabular}{ l | c }
\textbf{Parâmetro} & \textbf{Valores} \\\hline
Momentum & 0,8 \\\hline
Taxa de aprendizado & 0,001  0,003  0,01  0,03  0,1 0,3 \\\hline
Número máximo de iterações & 100 1000 10000 \\\hline
Número de neurônios intermediários & 4 8 12 16 \\
\end{tabular}
\end{center}
\label{tab:parametros}
\end{table}

% Como os pesos iniciais dos neurônios utilizados nos xperimentos foram aleatórios para cada execução, os resultados são não determinísticos e várias execuções deveriam ser realizadas para cada cenário para que os resultados fossem estatisticamente válidos. Entretanto, considerando a natureza investigativa deste trabalho, uma execução de cada cenário será suficiente para dar indícios dos parâmetros mais eficientes. Uma observação é que: dada a natureza da validação cruzada \textit{k-fold}, esta técnica permite algum nível de garantia de confiança, desde que a validação cruzada realize testes com partições da base de dados que sejam semelhantes.

A Figura \ref{fig:all} mostra a quantidade de acertos obtidos na execução da rede para os cenários avaliados. São apresentados quatro gráficos, onde cada um representa um valor diferente para o número de neurônios intermediários (\textit{hidden units}), tendo os dois gráficos de cima os valores 4 e 8, e os de baixo 12 e 16. Cada gráfico possui três curvas com pontos, onde cada curva representa um número máximo de iterações. O eixo $x$ (horizontal) representa a taxa de aprendizado (\textit{learning rate}), variando de 0,001 a 0,3. Note que o eixo x está em escala de log com base 10, o que corresponde aos valores escolhidos para a taxa de aprendizado (e.g. $10^{-3} = 0,001; 10^{-2.5} = 0,003; 10^{-2} = 0,01; ... ; 10^{-0.5} = 0,3$). O eixo $y$ representa a quantidade de acertos obtidos na execução da rede para cada configuração avaliada, sendo 20000 o máximo de acertos possíveis.

\begin{figure}[htb]
\centering
 \includegraphics[bb=0 0 576 480, scale=0.75]{images/all.png}
\caption{Número de acertos da execução da rede (máximo 20000), variando o número de neurônios intermediários, o número máximo de iterações e a taxa de aprendizado.}
\label{fig:all}
\end{figure}

Comparando os quatro gráficos, observa-se que, para os cenários avaliados, quanto maior o número de neurônios intermediários, melhor os resultados. O número máximo de iterações também é diretamente proporcional ao número de acertos. Porém, a diferença entre os cenários com 10000 iterações e com 1000 iterações não foi significante, principalmente para cenários com maiores quantidades de neurônios intermediários. Para o número máximo de iterações 100, obtém-se uma melhora nos resultados ao aumentar a taxa de aprendizado de 0,001 a 0,03. A partir deste ponto, aumentando a taxa de aprendizado até 0,3, o número de acertos se estabiliza, tendo em alguns casos um pequeno decréscimo. Para o número máximo de iterações 1000 e 10000, os valores para a taxa de aprendizado avaliados não afetam significantemente os resultados, apresentando também bons resultados para taxa de aprendizado 0,03. Portanto, a taxa de aprendizado escolhida para a próxima etapa foi a de 0,3, por apresentar os melhores resultados na maioria dos cenários.

A partir dos experimentos, observou-se que o número máximo de iterações impacta no tempo de execução quase linearmente. Então, experimentos com um número máximo de iterações de 10000 levam aproximadamente 10 vezes mais tempo para serem executados do que com um número máximo de iterações de 1000, considerando uma mesma configuração da rede neural. Como os resultados para esses dois valores foram praticamente iguais, utilizou-se na etapa seguinte o valor 1000 para o número máximo de iterações, por possuir um tempo de execução bem menor que o outro.

Com os cenários avaliados, não foi possível identificar se os resultados podiam melhorar significantemente ao aumentar ainda mais o número de neurônios intermediários. Uma outra avaliação foi feita com 23 novos cenários, variando o número de neurônios intermediários com valores entre 4 e 200, e fixando os valores do número máximo de iterações em 1000 e da taxa de aprendizado em 0,03. A Figura \ref{fig:hidden-units} apresenta o número de acertos da execução da rede (eixo $y$), variando o número de neurônios intermediários (eixo $x$).

\begin{figure}[htb]
\centering
 \includegraphics[bb=0 0 576 345, scale=0.75]{images/hidden_units.png}
\caption{Número de acertos da execução da rede (máximo 20000), variando o número de neurônios intermediários e fixando o número máximo de iterações em 1000 e a taxa de aprendizado em 0,03.}
\label{fig:hidden-units}
\end{figure}

O melhor resultado foi obtido com número de neurônios intermediários 100. Porém, observou-se durante os experimentos que quanto maior este valor, maior o tempo o tempo de execução do experimento. Nota-se no gráfico que a partir do número de neurônios intermediários igual a 40, os resultados se estabilizam e possuem uma variação muito pequena dai em diante. Como a diferença do resultado para o cenário com valor 100 não é significativamente maior que o cenário com valor 40, e o tempo de execução dos experimentos é significantemente impactado, utilizou-se o número de neurônios 40 para a próxima etapa da avaliação.

Na segunda etapa dos experimentos, foi feita uma avaliação usando validação cruzada \textit{10-fold} para o cenário escolhido na etapa anterior, com número máximo de iterações = 1000, taxa de aprendizado = 0.03 e número de neurônios intermediários = 40. Foram realizados 10 experimentos com os valores destes parâmetros fixos e com inicializações de pesos aleatórias. Os resultados estão apresentados na Tabela \ref{tab:best}.

\begin{table}[h!]
\caption{Número de acertos de 10 execuções usando validação cruzada \textit{10-fold}}
\footnotesize
\begin{center}
\begin{tabular}{ c | c | c | c | c | c | c | c | c | c | c }
\textbf{Rodada} & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\\hline
\textbf{Acertos} & 17606 & 17664 & 17644 & 17651 & 17709 & 17575 & 17644 & 17669 & 17573 & 17558
\end{tabular}
\end{center}
\label{tab:best}
\end{table}

A média de acertos foi de 17629,3 com intervalo de confiança de $\pm$ 0,2$\%$ para um nível de confiança de 95$\%$. A Figura \ref{fig:best} mostra o número de acertos de cada experimento, a média dos acertos e o intervalo de confiança da média.

\begin{figure}[htb]
\centering
 \includegraphics[bb=0 0 576 345, scale=0.75]{images/best.png}
\caption{Número de acertos da execução da rede (máximo 20000) para 10 rodadas com número máximo de iterações em 1000, taxa de aprendizado em 0,03 e número de neurônios intermediários 40}
\label{fig:best}
\end{figure}